package com.jerei.plugin.dao;

import com.jerei.plugin.entity.WcmCommonAdminuser;
import com.jerei.plugin.entity.WcmCommonMenuDetail;
import com.jerei.utils.condition.ConditionEntity;
import com.jerei.utils.spring.PageBean;

import java.util.List;
import java.util.Map;

/**
 * Created by sunfeihu on 2016/10/20.
 */
public interface IWcmCommonMenuDetailDao {

    /**
     * 增加单条数据
     *
     * @param entity 要增加的实体
     */
    WcmCommonMenuDetail save(WcmCommonMenuDetail entity);

    /**
     * 删除单条数据
     *
     * @param id 数据主键ID
     */
    int delete(Long id);

    /**
     * 修改单条数据
     *
     * @param entity 要修改的实体
     */
    int update(WcmCommonMenuDetail entity);

    /**
     * 查询单条数据
     *
     * @param id 数据主键ID
     */
    WcmCommonMenuDetail find(Long id);

    List<WcmCommonMenuDetail> find(List<Long> ids);


    /**
     * 增加多条数据
     *
     * @param list 多条数据实体集合
     */
    void save(List<WcmCommonMenuDetail> list);

    /**
     * 删除多条数据
     *
     * @param ids 多条数据主键ID集合
     */
    void delete(List<Long> ids);


    /**
     * 修改多条数据
     *
     * @param list 多条数据实体集合
     */
    void update(List<WcmCommonMenuDetail> list);

    PageBean<WcmCommonMenuDetail> page(int nowPage, int pageSize, ConditionEntity conditionEntity);

    PageBean<WcmCommonMenuDetail> pageDevRoot(int nowPage, int pageSize);

    PageBean<WcmCommonMenuDetail> pageGroupRoot(int nowPage, int pageSize, Long gid);

    /**
     * 根据用户获取顶级菜单
     *
     * @param adminuser 管理员帐号
     * @return 菜单信息
     */
    List<WcmCommonMenuDetail> getRootMenuDetail(WcmCommonAdminuser adminuser);

    /**
     * 没有权限的所有根菜单
     *
     * @return 结果集
     */
    List<WcmCommonMenuDetail> getDevRootMenuDetailNoPower();

    List<WcmCommonMenuDetail> getGroupRootMenuDetailNoPower(Long gid);

    /**
     * 根据父节点获取菜单，有权限限制
     *
     * @param pid 父菜单ID
     * @return 结果集
     */
    List<WcmCommonMenuDetail> getMenuDetailsByParent(Long adminuserId, Long pid);

    /**
     * 根据父节点获取菜单，没有权限限制
     *
     * @param pid 父菜单ID
     * @return 结果集
     */
    List<WcmCommonMenuDetail> getMenuDetailsByParentNoPower(Long pid);

    /**
     * 获取角色拥有的所有菜单
     *
     * @param roleId 角色ID
     * @return
     */
    List<WcmCommonMenuDetail> getMenuDetailsByRole(Long roleId);

    /**
     * 为角色添加菜单
     *
     * @param roleId 角色ID
     * @param ids    菜单ID
     */
    void addPowerForRole(Long roleId, Long[] ids);

    /**
     * 为角色删除菜单
     *
     * @param roleId 角色ID
     * @param ids    菜单ID
     */
    void deletePowerForRole(Long roleId, Long[] ids);

    /**
     * 为角色修改菜单
     *
     * @param roleId 角色ID
     * @param ids    菜单ID
     */
    void updatePowerForRole(Long roleId, Long[] ids);

    /**
     * 为角色情况菜单
     *
     * @param roleId 角色ID
     */
    void clearPowerForRole(Long roleId);

    /**
     * 查询角色权限
     *
     * @param roleIds 角色
     */
    List<Map<String, Object>> findPermissions(Long[] roleIds);

}